public class w2 {
    //求 N 的阶乘
    public static int func(int n){
        int i = 0;
        int sum = 1;
        for(i = 1; i <= n; i++){
            sum *= i;
        }
        return sum;
    }

    //求1！+2！+3！+4！+........+n!的和
    public static int funcSum(int n) {
        int sum = 0;
        for(int j = 1; j <= n; j++){
             sum += func(j);
        }
        return sum;
    }

    //求斐波那契数列的第n项(迭代实现)
    public static int fib(int n){
        int last2 = 1;
        int last1 = 1;
        int cur = 0;
        for(int i = 0; i <= n; i++){
            cur = last1 + last2;
            last2 = last1;
            last1 = cur;
        }
        return cur;
    }

    // 在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码，求出结果
    public static int sum(int x,int y){
        return x+y;
    }
    public static double sum(double x,double y,double z){
        return x+y+z;
    }


    //在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值？
    public static int max(int x, int y){
        if(x>y){
            return x;
        }else{
            return y;
        }
    }
    public static int max(int x, int y, int z) {
        int ret = 0;
        if (x > y) {
            ret = x;
        }
        if(ret>z){
            return ret;
        }else{
            return z;
        }
    }

    //递归求 N 的阶乘
    public static int f(int n){
        if(n == 1){
            return 1;
        }
        return n*f(n-1);
    }

    //递归求解汉诺塔问题
    public static void solveHanoi(int n, char source, char auxiliary, char destination) {
        if (n == 1) {
            System.out.println("Move disk 1 from " + source + " to " + destination);
            return ;
        }
        // 递归步骤：
        // 1. 将 n-1 个盘子从 source 移动到 auxiliary，使用 destination 作为辅助
        solveHanoi(n - 1, source, destination, auxiliary);

        // 2. 将第 n 个盘子从 source 移动到 destination
        System.out.println("Move disk " + n + " from " + source + " to " + destination);

        // 3. 将 n-1 个盘子从 auxiliary 移动到 destination，使用 source 作为辅助
        solveHanoi(n - 1, auxiliary, source, destination);
    }
    public static void main(String[] args) {
        int n = 3; // 盘子的数量
        solveHanoi(n, 'A', 'B', 'C');
        System.out.println(f(3));
        System.out.println(max(12,21));
        System.out.println(max(14,2,8));
        System.out.println(sum(1,2));
        System.out.println(sum(1.5,2.6,1.2));
        System.out.println(func(5));
        System.out.println(funcSum(5));
        System.out.println(fib(5));

    }
}
